package com.weetop.cfw.application

import android.app.ActivityManager
import android.app.Application
import android.content.Context
import android.os.Build
import android.os.Process
import android.view.Gravity
import android.webkit.WebView
import cn.jpush.android.api.JPushInterface
import com.baidu.mapapi.CoordType
import com.baidu.mapapi.SDKInitializer
import com.blankj.utilcode.util.ColorUtils
import com.blankj.utilcode.util.LogUtils
import com.coorchice.library.ImageEngine
import com.kongzue.dialog.util.DialogSettings
import com.kongzue.dialog.util.TextInfo
import com.lzf.easyfloat.EasyFloat
import com.scwang.smartrefresh.layout.SmartRefreshLayout
import com.scwang.smartrefresh.layout.footer.ClassicsFooter
import com.scwang.smartrefresh.layout.header.ClassicsHeader
import com.tencent.bugly.crashreport.CrashReport
import com.tencent.mmkv.MMKV
import com.weetop.cfw.R
import com.weetop.cfw.utils.GlideEngine
import com.weetop.cfw.utils.MMKVUtils
import me.jessyan.autosize.AutoSize
import me.jessyan.autosize.AutoSizeConfig

class CFWApplication : Application() {

    companion object {

        var vipLevel: String = "0"

        //音频播放进度
        var audioCurrentProgress: Int = 0
        //视频播放进度
        var videoCurrentProgress: Int = 0
        //悬浮窗是否是第一次隐藏
        var isFloatingWindowFirstHide = true
        //音频悬浮窗旋转的次数
        var audioFloatingWindowRotateNumber = 0
    }



    override fun onCreate() {
        super.onCreate()
        //腾讯bug
        CrashReport.initCrashReport(getApplicationContext(), "193fc35155", false);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            val processName = getProcessName(this)
            val packageName = this.packageName
            if (packageName != processName) {
                WebView.setDataDirectorySuffix(processName)
            }
        }

        EasyFloat.init(this, true)
        //在使用SDK各组件之前初始化context信息，传入ApplicationContext
        SDKInitializer.initialize(this)
        //自4.3.0起，百度地图SDK所有接口均支持百度坐标和国测局坐标，用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标，默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL)

        initJPush()
        //当 App 中出现多进程, 并且您需要适配所有的进程, 就需要在 App 初始化时调用 initCompatMultiProcess()
        //在 Demo 中跳转的三方库中的 DefaultErrorActivity 就是在另外一个进程中, 所以要想适配这个 Activity 就需要调用 initCompatMultiProcess()
        AutoSize.initCompatMultiProcess(this)
        AutoSizeConfig.getInstance().isCustomFragment = true

        // 安装图片引擎
        ImageEngine.install(GlideEngine(this))

        initSmartRefreshLayout()
        initKongZueDialog()

        val mmkvDir = MMKV.initialize(this)
        //LogUtils.e("mmkvDir", mmkvDir)
        //LogUtils.e("token", MMKVUtils.getToken())
    }

    private fun initSmartRefreshLayout() {
        //全局设置默认的 Header
        SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, layout ->
            //开始设置全局的基本参数（这里设置的属性只跟下面的MaterialHeader绑定，其他Header不会生效，能覆盖DefaultRefreshInitializer的属性和Xml设置的属性）
            layout.setEnableHeaderTranslationContent(true)
            ClassicsHeader(context).setDrawableArrowSize(14f).setDrawableSize(14f)
                .setEnableLastTime(false)
        }
        //全局设置默认的 footer
        SmartRefreshLayout.setDefaultRefreshFooterCreator { context, layout ->
            //开始设置全局的基本参数（这里设置的属性只跟下面的MaterialHeader绑定，其他Header不会生效，能覆盖DefaultRefreshInitializer的属性和Xml设置的属性）
            layout.setEnableHeaderTranslationContent(true)
            ClassicsFooter(context).setDrawableArrowSize(14f).setDrawableSize(14f)
        }
    }

    /**
     * 初始化极光推送
     */
    private fun initJPush() {
        JPushInterface.setDebugMode(true)
        JPushInterface.init(this)
    }

    /**
     * 初始化Dialog
     */
    private fun initKongZueDialog() {
        DialogSettings.isUseBlur = true                  //是否开启模糊效果，默认关闭
        DialogSettings.modalDialog = true                 //是否开启模态窗口模式，一次显示多个对话框将以队列形式一个一个显示，默认关闭
        DialogSettings.style =
            (DialogSettings.STYLE.STYLE_IOS)          //全局主题风格，提供三种可选风格，STYLE_MATERIAL, STYLE_KONGZUE, STYLE_IOS
        DialogSettings.theme =
            (DialogSettings.THEME.LIGHT)          //全局对话框明暗风格，提供两种可选主题，LIGHT, DARK
        DialogSettings.tipTheme =
            (DialogSettings.THEME.LIGHT)       //全局提示框明暗风格，提供两种可选主题，LIGHT, DARK
        DialogSettings.cancelable =
            true                 //全局对话框默认是否可以点击外围遮罩区域或返回键关闭，此开关不影响提示框（TipDialog）以及等待框（TipDialog）
        DialogSettings.cancelableTipDialog = true         //全局提示框及等待框（WaitDialog、TipDialog）默认是否可以关闭
        DialogSettings.DEBUGMODE = true                  //是否允许打印日志
        DialogSettings.blurAlpha = 210                       //开启模糊后的透明度（0~255）
        DialogSettings.autoShowInputKeyboard = true       //设置 InputDialog 是否自动弹出输入法
        DialogSettings.contentTextInfo = TextInfo().setGravity(Gravity.CENTER).setFontSize(14)
            .setFontColor(ColorUtils.getColor(R.color.c333))            //全局正文文字样式

    }


    private fun getProcessName(context: Context?): String? {
        if (context == null) return null
        val manager =
            context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        for (processInfo in manager.runningAppProcesses) {
            if (processInfo.pid == Process.myPid()) {
                return processInfo.processName
            }
        }
        return null
    }
}